/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package service;

import conexion.Conexion;
import controladores.ControladorGenerico;
import controladores.SesionJpaController;
import controladores.SocioJpaController;
import entidades.miembros.Socio;
import entidades.nopersist.Imagen;
import java.util.Calendar;
import java.util.List;
import javax.persistence.EntityManager;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

/**
 *
 * @author fcarou
 */
@Path ("socios")
public class RestSocios
{
    @GET
    @Path ("todos")
    @Produces (MediaType.APPLICATION_JSON)
    public List<Socio> getSocios ()
    {
        ControladorGenerico con = new ControladorGenerico(Conexion.getConexion().getEntityManager());
        return con.buscarTodos(Socio.class);
    }
    
    @GET
    @Path ("porCadena")
    @Produces (MediaType.APPLICATION_JSON)
    public List<Socio> getSocios (@QueryParam("cadena") String cadena)
    {
        SocioJpaController con = new SocioJpaController(Conexion.getConexion().getEntityManager());
        return con.buscarSocios(cadena);
    }
    
    @GET
    @Path ("porID")
    @Produces (MediaType.APPLICATION_JSON)
    public Socio getSocio (@QueryParam("id")long id)
    {
        return Conexion.getConexion().getEntityManager().find(Socio.class, id);
    }
    
    @GET
    @Path ("baja")
    public boolean baja (@QueryParam("id")long id, @HeaderParam ("codigo") String codigo)
    {
        EntityManager em = Conexion.getConexion().getEntityManager();
        
        if (!new SesionJpaController ().checkCodigoSesion(codigo))
            return false;
        
        Socio socio = em.find(Socio.class, id);
        System.out.println("El id que me llego! " + id);
        try
        {
            if (socio != null && socio.getDatosInstitucionales().getBaja() == null)
            {
                em.getTransaction().begin();
                socio.getDatosInstitucionales().setBaja(Calendar.getInstance());
                em.getTransaction().commit();
                
                return true;
            }
        }
        catch (Exception e)
        {
            
        }
        
        return false;
    }
    
    @POST
    @Path("create")
    @Consumes (MediaType.APPLICATION_JSON)
    public boolean create (Socio socio, @HeaderParam ("codigo") String codigo)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return false;
        
        SocioJpaController con = new SocioJpaController();
        
        return con.create(socio);
    }
    
    @POST
    @Path ("edit")
    @Consumes (MediaType.APPLICATION_JSON)
    public boolean edit (Socio socio, @HeaderParam ("codigo") String codigo)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return false;
        
        SocioJpaController con = new SocioJpaController();
        
        return con.edit(socio);
    }
    
    @GET
    @Path ("getImagen")
    @Produces (MediaType.APPLICATION_JSON)
    public Imagen getImagen (@QueryParam ("id") long id)
    {
        Socio socio = this.getSocio(id);
        
        try
        {
            if (socio != null)
                return new Imagen(socio.getDatosPersonales().getImagen());
        }
        catch (Exception e)
        {
            
        }
        
        return null;
    }
}
